/**
 * Root interface for all elements in the Feed Object Model
 */	
public interface Element {
		Element getParentElement();
    	Element setParentElement(Element parent);
  		Element getPreviousSibling();
  		Element getNextSibling();
  		Element getFirstChild();
  		Element getPreviousSibling(QName qname);
		Element getNextSibling(QName qname);
  		Element getFirstChild(QName qname);  
  		xml.QName getQName();
  		String getLanguage();
  		String getLanguageTag();
  		String getLocale();
		Element setLanguage(String language);
  		IRI getBaseIRI();
  		IRI getResolvedBaseIRI();
		Element setBaseIRI(IRI base);
		Element setBaseIRI(String base);
  		Element getDocument();
  		String getAttributeValue(String name);
  		String getAttributeValue(xml.QName qname);
  		List<xml.QName> getAttributes();
  		List<xml.QName> getExtensionAttributes();
  		Element removeAttribute(xml.QName qname);
  		Element removeAttribute(String name);
  
	  /**
	   * Sets the value of the named attribute
	   * @param name The name of the attribute
	   * @param value The value of the attribute
	   */
		Element setAttributeValue(String name, String value);
	
	  /**
	   * Sets the value of the named attribute
	   * @param qname The XML QName of the attribute
	   * @param value The value of the attribute
	   */
		Element setAttributeValue(QName qname, String value);
  
	  /**
	   * Removes this element from its current document
	   */
  		void discard();
  
	  /**
	   * Returns the Text value of this element
	   * @return The text value
	   */
	   	String getText();
  
	  /**
	   * Set the Text value of this element
	   * @param text The text value
	   */
  		void setText(String text);
  
	  /**
	   * Declare a namespace
	   */
  		Element declareNS(String IRI, String prefix);
  
	  /**
	   * Return a map listing the xml namespaces declared for this element
	   */
  		Map<String,String> getNamespaces();
  
	  /**
	   * Return a listing of this elements child elements
	   */
  		List<Element> getElements();
  
	  /**
	   * Return true if insignificant whitespace must be preserved
	   */
  		Boolean getMustPreserveWhitespace();
  
	  /**
	   * Set to true to preserve insignificant whitespace
	   */
  		Element setMustPreserveWhitespace(boolean preserve);		
}